Testing is an important element in a software development lifecycle (SDLC) as it ensures stability of the computer program code and enables early identification of regressions. A regression can be considered as a code failure induced by a change to the code, e.g., an attempt to fix a bug in one portion of the code might cause a code failure at the same general location as the bug or elsewhere. More simply, a change in the code can cause all or some of the code to regress from a working state to a failed state. There are various forms of program testing including, for example, unit tests, integration tests and system tests.
One significant challenge that arises when one or more tests fail due to one or more code changes is to trace the failure back to its root cause(s). This task is generally easier to accomplish if the code base is maintained by a single developer, and if the increments across which tests may switch from passing to failing are well delimited and well understood. In reality, however, this is rarely the case as in many instances the code base might be maintained by one or more teams of developers that can be geographically distributed over a wide area.